package com.itfreer.bpm.workflow.drive;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.itfreer.bpm.option.para.NextTaskInfo;
import com.itfreer.bpm.option.para.OptionInfo;
import com.itfreer.bpm.option.para.TaskInfo;
import com.itfreer.bpm.power.para.UserInfo;

/**
 * 流程驱动接口
 * @author gj
 *
 */
public interface IWorkFlowDrive {
	/**
	 * 启动流程
	 * @return
	 */
	public String startFlow(String activitiKey);
	
	/**
	 * 获取下一个节点信息
	 * @param sexeid
	 * @return
	 */
	public NextTaskInfo getNextTask(String bpmkey,String taskid);
	/**
	 * 获取流程节点类型
	 * @param bpmKey
	 * @param taskid
	 * @return
	 */
	public String getTaskStringType(String bpmKey,String taskid);
	/**
	 * 获取当前节点
	 * @param sexeid
	 * @return
	 */
	public List<TaskInfo> getCurrentTask(String sexeid);
	
	/**
	 * 获取退回节点信息
	 * @param bpmkey
	 * @param taskid
	 * @return
	 */
	public NextTaskInfo getRollBackTask(String bpmkey,String taskid);


	boolean SignCommonTask(String proId, UserInfo user, TaskInfo tjTask, HashMap<String, Object> ComValue);

	boolean SignMultiSingleTask(String proId, List<UserInfo> users, UserInfo user, TaskInfo tjTask,
			Map<String, Object> comValues);
	
	/**
	 * 节点任意跳转功能
	 * @param sexeid 流程实例id
	 * @param targetTaskDefined 实现跳转的目标节点
	 */
	public boolean JumpTask(String sexeid,String targetTaskDefined);
	
	/**
	 * 流程退件处理
	 * @param exeId
	 * @return
	 */
	boolean dispose(String exeId);
	
	public TaskInfo getFirstTask(String bpmKey);
}
